using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Mentrixmax.Comuns.Entidades.Interface;
using Sarc;

namespace MentrixmaxFormularios.FormsAbstratos
{
    public partial class Lov : UserControl
    {
        public Lov()
        {
            InitializeComponent();
        }
        private Mentrixmax.Comuns.Negocio.Interface.INegocio PNegocio;

        public Mentrixmax.Comuns.Negocio.Interface.INegocio Negocio
        {
            get { return PNegocio; }
            set { PNegocio = value; }
        }
        private FrPesquisaPai PPesquisa;

        public FrPesquisaPai Pesquisa
        {
            get { return PPesquisa; }
            set { PPesquisa = value; }
        }

        private bool PExecutaFindId;

        public bool ExecutaFindId
        {
            get { return PExecutaFindId; }
            set { PExecutaFindId = value; }
        }

        public void Clear() {
            this.EntidadeRetorno = null;
            txtCodigo.Clear();
            txtDescricao.Clear();
            
        }
        private int? PId;

        public int? Id
        {
            get { return PId; }
            set
            {
                PId = value;
                if (this.Negocio != null)
                {
                    setEntidade(this.Negocio.findById(value));
                    
                }
            }
        }


        public delegate void SubmitClickedHandler();
        // Declare the event, which is associated with our
        // delegate SubmitClickedHandler(). Add some attributes
        // for the Visual C# control property.
        [Category("Action")]
        [Description("Fires when the Submit button is clicked.")]
        public event SubmitClickedHandler PostActionEvent;
        // Add a protected method called OnSubmitClicked().
        // You may use this in child classes instead of adding

        private Mentrixmax.Comuns.Entidades.Interface.IEntidade PEntidadeRetorno;

        public Mentrixmax.Comuns.Entidades.Interface.IEntidade EntidadeRetorno
        {
            get { return PEntidadeRetorno; }
            set
            {

                PEntidadeRetorno = value;
            }
        }

        private FormPai PFormulario;

        public FormPai Formulario
        {
            get { return PFormulario; }
            set { PFormulario = value; }
        }

        private void setEntidade(IEntidade ret)
        {
            if (ret != null)
            {
                EntidadeRetorno = ret;
                txtDescricao.Text = EntidadeRetorno.DescricaoCombo;
                txtCodigo.Text = EntidadeRetorno.Chave;
                
            }
            else
            {
                EntidadeRetorno = null;
                txtDescricao.Clear();
            }
        }
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                this.PPesquisa.IsLov = true;
                if (this.PPesquisa.ShowDialog() == DialogResult.OK)
                {
                    IEntidade ret = this.Negocio.findById(this.PPesquisa.DadoRetorno);
                    txtCodigo.Text = ret.Chave;
                    setEntidade(ret);
                    this.Formulario.NovoRegistro = true;
                    this.Formulario.HabilitarCampos(null, new EventArgs());
                    PostActionEvent();
                }
            }
            catch
            {
            }

        }

        private void txtCodigo_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (PNegocio != null)
                {
                    IEntidade result = null;
                    if (ExecutaFindId) {
                        result = this.PNegocio.findById(Convert.ToInt32(txtCodigo.Text));
                    }else{
                      result= this.PNegocio.findByChave(txtCodigo.Text);
                    }
                    setEntidade(result);
                    PostActionEvent();
                    this.Formulario.NovoRegistro = true;
                    this.Formulario.HabilitarCampos(null, new EventArgs());
                }
            }
            catch
            {
            }
        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            
        }

        protected virtual void OnPostActionEvent()
        {
            // If an event has no subscribers registerd, it will
            // evaluate to null. The test checks that the value is not
            // null, ensuring that there are subsribers before
            // calling the event itself.
            if (PostActionEvent != null)
            {
                PostActionEvent();  // Notify Subscribers
            }
        }

        private void txtCodigo_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F3) {
                btnBuscar_Click(sender, new EventArgs());
            }
        }
    }
}
